home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / Python 133 SRC / Python / getopt.c < prev    next >
Text File  |  1995-12-21  |  2KB  |  89 lines

  1. /*---------------------------------------------------------------------------*
  2.  * <RCS keywords>
  3.  *
  4.  * C++ Library
  5.  *
  6.  * Copyright 1992-1994, David Gottner
  7.  *
  8.  *                    All Rights Reserved
  9.  *
  10.  * Permission to use, copy, modify, and distribute this software and its 
  11.  * documentation for any purpose and without fee is hereby granted, 
  12.  * provided that the above copyright notice, this permission notice and
  13.  * the following disclaimer notice appear unmodified in all copies.
  14.  *
  15.  * I DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  16.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL I
  17.  * BE LIABLE FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
  18.  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER
  19.  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
  20.  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  21.  *
  22.  * Nevertheless, I would like to know about bugs in this library or
  23.  * suggestions for improvment.  Send bug reports and feedback to
  24.  * davegottner@delphi.com.
  25.  *---------------------------------------------------------------------------*/
  26.  
  27. #include <stdio.h>
  28. #include <string.h>
  29.  
  30. #define bool    int
  31. #define TRUE    1
  32. #define FALSE    0
  33.  
  34.  
  35. bool    opterr = TRUE;          /* generate error messages */
  36. int     optind = 1;             /* index into argv array   */
  37. char *  optarg = NULL;          /* optional argument       */
  38.  
  39.  
  40. int getopt(argc,argv,optstring)
  41. int argc; 
  42. char *argv[]; 
  43. char optstring[];
  44. {
  45.     static   char *opt_ptr = "";
  46.     register char *ptr;
  47.              int   option;
  48.  
  49.     if (*opt_ptr == '\0') {
  50.  
  51.         if (optind >= argc || argv[optind][0] != '-')
  52.             return -1;
  53.  
  54.         else if (strcmp(argv[optind], "--") == 0) {
  55.             ++optind;
  56.             return -1;
  57.         }
  58.  
  59.         opt_ptr = &argv[optind++][1]; 
  60.     }
  61.  
  62.     if ((ptr = strchr(optstring, option = *opt_ptr++)) == NULL) {
  63.         if (opterr)
  64.             fprintf(stderr, "Unknown option: -%c\n", option);
  65.  
  66.         return '?';
  67.     }
  68.  
  69.     if (*(ptr + 1) == ':') {
  70.         if (*opt_ptr != '\0') {
  71.             optarg  = opt_ptr;
  72.             opt_ptr = "";
  73.         }
  74.  
  75.         else {
  76.             if (optind >= argc) {
  77.                 if (opterr)
  78.                     fprintf(stderr,
  79.                 "Argument expected for the -%c option\n", option);
  80.                 return '?';
  81.             }
  82.  
  83.             optarg = argv[optind++];
  84.         }
  85.     }
  86.  
  87.     return option;
  88. }
  89.